﻿#pragma once

#include <Eigen/Dense> 
#include <Eigen/Core>
#include <Eigen/Geometry>
#include <opencv2/opencv.hpp>

#include "common_data.h"

class EigenFunc
{
public:
	EigenFunc();
	~EigenFunc();

	// 欧拉角转换为3*3旋转矩阵
	static Eigen::Matrix3d TransEuler2Matrix(float Za, float Ya, float Xa);
	// 欧拉角坐标转换为4维旋转矩阵
	static Eigen::Matrix4d TransEulerPostion2Matrix(const Position& pos);

	// 4维float矩阵转 cv::Mat
	static cv::Mat MatrixToMat4d(Eigen::Matrix4f& matMatrix4f);
	static cv::Mat MatrixToMat4d(Eigen::Matrix4d& matMatrix4d);

	static Eigen::Matrix4f Mat4d2Matrix4f(cv::Mat matMatrix4d);
	//分解3D齐次阵为旋转矢量和平移矢量
	static void HomMat3dToRVT(const cv::Mat& HomMat3d, cv::Mat* Rvec, cv::Mat* Tvec);
	static void lines(cv::InputOutputArray img, const std::vector<cv::Point2f>& vpt1,
		const std::vector<cv::Point2f>& vpt2, const cv::Scalar& color, int thickness = 1,
		int lineType = cv::LINE_8, int shift = 0);
	static QByteArray ImgEncodeToByte(const cv::Mat& Image, const std::string& ext);
};

